package com.example.demo.demo.reflect;

/**
 * 动态加载类
 * 功能性的类一般使用动态加载而不是静态加载
 * @author: htc
 * @date: Created in 11:09 2018/3/23.
 */
public class ClassDemo2 {
    public static void main(String[] args) {
        //通过请求参数className来控制实例化哪个类
        String className = "com.iresearch.idata.swap.reflect.World";
//        String className = "com.iresearch.idata.swap.reflect.Word";

        if (1 != 1) {
            //new 创建的对象 是静态加载类。在编译的时候就需要加载所有可能使用到的类。
            Word word = new Word();
        } else {
            //动态加载类 运行时用到的时候加载
            try {
                Class c = Class.forName(className);
                W w = (W) c.newInstance();
                w.print();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            }
        }
    }

}

class Word implements W {
    @Override
    public void print() {
        System.out.println("word");
    }
}

class World implements W {
    @Override
    public void print() {
        System.out.println("world");
    }
}

interface W {
    public void print();
}

